package com.agileboot.attendance.domain.holiday.service;

import com.agileboot.attendance.domain.holiday.db.entity.Holiday;
import com.agileboot.attendance.domain.holiday.dto.HolidayDTO;
import com.agileboot.attendance.domain.holiday.dto.HolidayQueryDTO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.time.LocalDate;
import java.util.List;

/**
 * 节假日Service接口
 *
 * @author ruoyi
 */
public interface IHolidayService extends IService<Holiday> {
    
    /**
     * 分页查询节假日列表
     *
     * @param page 分页参数
     * @param queryDTO 查询条件
     * @return 节假日列表
     */
    IPage<HolidayDTO> page(IPage<Holiday> page, HolidayQueryDTO queryDTO);
    
    /**
     * 获取节假日详情
     *
     * @param holidayId 节假日ID
     * @return 节假日信息
     */
    HolidayDTO getInfo(Long holidayId);
    
    /**
     * 新增节假日
     *
     * @param holidayDTO 节假日信息
     * @return 结果
     */
    boolean add(HolidayDTO holidayDTO);
    
    /**
     * 修改节假日
     *
     * @param holidayDTO 节假日信息
     * @return 结果
     */
    boolean update(HolidayDTO holidayDTO);
    
    /**
     * 删除节假日
     *
     * @param holidayId 节假日ID
     * @return 结果
     */
    boolean delete(Long holidayId);
    
    /**
     * 批量删除节假日
     *
     * @param holidayIds 节假日ID数组
     * @return 结果
     */
    boolean deleteBatch(Long[] holidayIds);
    
    /**
     * 导入节假日数据
     *
     * @param year 年份
     * @return 结果
     */
    boolean importHolidays(Integer year);
    
    /**
     * 判断指定日期是否为节假日
     *
     * @param date 日期
     * @return 是否为节假日
     */
    boolean isHoliday(LocalDate date);
    
    /**
     * 获取指定年份的所有节假日
     *
     * @param year 年份
     * @return 节假日列表
     */
    List<HolidayDTO> getHolidaysByYear(Integer year);
    
    /**
     * 获取指定月份的所有节假日
     *
     * @param year 年份
     * @param month 月份
     * @return 节假日列表
     */
    List<HolidayDTO> getHolidaysByMonth(Integer year, Integer month);
} 